官网

GitHub

文档

服务与支持

常见问题

通知中心

Heeteve

个人主页

设置

退出

安装部署

ETCD 备份还原实战

回复

回复

关注

不关注仅当有人提及我时通知我。

关注中当有人回复此主题时通知我。

忽视中不接收任何通知并从主题列表中隐藏此主题。

1 / 2 条

最早内容

1 / 2 条十月 2024

0 条未读

最新回复

CauchyK零SK壹S

2024年9月11日
发布 #1 2024年9月11日星期三 18点22分

已编辑

注意: 利用 etcd 备份可还原集群中的资源对象，但集群中应用所挂载的持久化存储的备份与还原，依赖存储系统的备份还原能力。集群操作需谨慎！集群操作需谨慎！集群操作需谨慎！

使用 kk 部署的 k8s 集群 etcd 默认每天有备份，可以根据需求调整备份周期，对于备份数据，可以定期上传到对象存储。（每个备份目录中包含snapshot.db文件）

测试内容

1. 新建 etcd 备份

2. 整体删除 wordpress 命名空间

3. 利用 etcd 备份对集群进行还原，并验证 wordpress 命名空间是否被恢复

测试步骤:

1.新建备份

bash /usr/local/bin/kube-scripts/etcd-backup.sh

etcd-2024-05-29-16-40-21 为新建备份

2.删除 wordpress 命名空间 （本次为测试操作，正式环境禁止执行该高危操作）

3.还原集群数据

注意: 使用同一份备份数据对集群进行还原，将备份 etcd-2024-05-29-16-40-21 同步到多有 etcd 节点

暂停集群所有 control-plan 节点相关服务 （kubelet、docker、etcd）

systemctl stop kubelet
systemctl stop docker
systemctl stop etcd

将所有etcd节点原始数据目录备份（目的为清空etcd数据目录，为恢复数据做准备）

mkdir -p /var/lib/etcd-bak
mv /var/lib/etcd/* /var/lib/etcd-bak/

在每个 etcd 节点上执行数据还原

## 还原命令中的参数从 /etc/etcd.env 文件中获取
# node1
etcdctl snapshot restore /var/backups/kube_etcd/etcd-2024-05-29-16-40-21/snapshot.db \
--name=etcd-node1 --endpoints=https://192.168.6.4:2379 \
--initial-cluster=etcd-node1=https://192.168.6.4:2380,etcd-node2=https://192.168.6.5:2380,etcd-node3=https://192.168.6.6:2380 \
--initial-advertise-peer-urls=https://192.168.6.4:2380 \
--initial-cluster-token=k8s_etcd \
--data-dir=/var/lib/etcd

# node2
etcdctl snapshot restore /home/ubuntu/etcd-2024-05-29-16-40-21/snapshot.db \
--name=etcd-node2 --endpoints=https://192.168.6.5:2379 \
--initial-advertise-peer-urls=https://192.168.6.5:2380 \
--initial-cluster-token=k8s_etcd \
--data-dir=/var/lib/etcd

# node3
etcdctl snapshot restore /home/ubuntu/etcd-2024-05-29-16-40-21/snapshot.db \
--name=etcd-node3 --endpoints=https://192.168.6.6:2379 \
--initial-cluster=etcd-node1=https://192.168.6.4:2380,etcd-node2=https://192.168.6.5:2380,etcd-node3=https://192.168.6.6:2380 \
--initial-advertise-peer-urls=https://192.168.6.6:2380 \
--initial-cluster-token=k8s_etcd \
--data-dir=/var/lib/etcd

重启所有 etcd 节点 etcd 服务 （注意: 3 节点 etcd 应同时启动两台 etcd ，集群才可恢复正常）

检查 etcd 集群状态

export ETCDCTL_CACERT=/etc/ssl/etcd/ssl/ca.pem
export ETCDCTL_KEY=/etc/ssl/etcd/ssl/admin-node3-key.pem
export ETCDCTL_CERT=/etc/ssl/etcd/ssl/admin-node3.pem
export ETCDCTL_ENDPOINTS=https://192.168.6.4:2379,https://192.168.6.5:2379,https://192.168.6.6:2379

etcd 集群状态正常后，重启集群 control-plan 节点服务 （docker，kubelet）

systemctl restart docker
systemctl restart kubelet

检查集群状态及 wordpress 命名空间状态

回复

赞

举报

xiaotian 和 penn19 觉得很赞

1 个月 后

ekk

2024年10月11日
发布 #2 2024年10月11日星期五 10点25分

能共享下etcd的备份脚本吗，谢谢！

回复

赞

举报

说点什么吧...

正在加载…

加载论坛时出错，请强制刷新页面重试。

商业产品与合作咨询